/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
import java.io.*;
import java.net.InetAddress;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.server.UnicastRemoteObject;
import java.util.Date;
/**
 *
 * @author Jesus
 */
public class ImpServidorRemoto extends UnicastRemoteObject implements IServidorRemoto {

    int puerto = 0;
    Logger logger = new Logger();

    public ImpServidorRemoto() throws RemoteException
    {
        super();
        puerto = 9998;
    }

    public String vista(String ipCliente, String archivo)
    {
        String respuesta= "";
        System.out.println(archivo);
        try{

            FileReader fichero = new FileReader("archivos/"+ archivo);
            BufferedReader lector = new BufferedReader(fichero);

            while(lector.ready()){

                respuesta = respuesta + lector.readLine() + "\n";

            }


            fichero.close();
            logger.log(ipCliente,"vista","exito");
        }catch (Exception e) {
            logger.log(ipCliente,"vista","error - "+e.toString());
        }

        return respuesta;
    }


    public Boolean actualizar (String ipCliente, String archivo, String informacion){

        try{
            //solamente para ver si existe
            FileReader fichero = new FileReader("archivos/"+ archivo);
            fichero.close();
            FileWriter fstream = new FileWriter("archivos/"+archivo);
            BufferedWriter out = new BufferedWriter(fstream);
            out.write(informacion);
            out.close();


            logger.log(ipCliente,"actualizar","exito - "+archivo);
            return true;
        }catch (Exception e) {
            logger.log(ipCliente,"actualizar","error - "+e.toString());
            return false;
        }
    }
    public Boolean eliminarArchivo (String ipCliente, String archivo){
        boolean proceso;
        try
        {
            File arch = new File("archivos/"+archivo);
            proceso = arch.delete();
            if (proceso)
            {
                logger.log(ipCliente,"eliminar","exito - "+archivo);
                return true;
            }else
            {
                logger.log(ipCliente,"eliminar","error - "+archivo+" no existe.");
                return false;
            }

        }catch (Exception e) {
            logger.log(ipCliente,"actualizar","error - "+e.toString());
            return false;
        }
    }
    
    public String consultarBitacora (String ipCliente, String servidor)
    {
        String respuesta= "";

        try{

            FileReader fichero = new FileReader("logs.txt");
            BufferedReader lector = new BufferedReader(fichero);

            while(lector.ready()){

                respuesta = respuesta + lector.readLine() + "\n";

            }


            fichero.close();
            logger.log(ipCliente,"consultar bitacora","exito");
        }catch (Exception e) {
            logger.log(ipCliente,"consultar bitacora","error - "+e.toString());
        }

        return respuesta;
    }

    public String[][] listaArchivos(String ipCliente)
    {
        File carpeta = null;
        String[][] lista = new String[1000][2];

        try
        {
            carpeta = new File("archivos");
            File[] listOfFiles = carpeta.listFiles();
            int cont = 0;
            for (int i = 0; i < listOfFiles.length; i++)
            {
              if (listOfFiles[i].isFile())
              {
                lista[cont][0] = listOfFiles[i].getName();
                float peso = listOfFiles[i].length();
                peso = peso/1000;
                lista[cont][1] = Float.toString(peso)+ "KB";
                System.out.println("File " + listOfFiles[i].getName() + " " + peso);
                cont++;
              }
            }
            
            logger.log(ipCliente,"listar Archivos","exito");

            return lista;
        }catch(Exception e)
        {
            logger.log(ipCliente,"listar archivos","error - "+e.toString());
            return null;
        }        
    }

    public boolean registrarServicio()
    {
        try
        {
            // crea el RMIRegistry en el puerto indicado
            LocateRegistry.createRegistry(puerto);
            Naming.bind("//" + InetAddress.getLocalHost().getHostAddress() +":" + puerto + "/ServidorA", this);
            System.out.println("Servidor de Archivos ha sido iniciado exitosamente");
            return true;
         }
         catch (Exception e)
         {
            System.out.println("Error al iniciar servidor, causa: " + e.toString());
            return false;
         }
    }


}